The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
Data transfer systems, such as data transmission systems and data storage systems, are typically characterized as data channels. In data transmission systems, for example, data can be transmitted via channels such as wires, fiber-optic cable, wireless protocols, etc. In data storage systems, the storage medium itself is a data channel. In this regard, storage system channels can include, for example, hard disk platters, solid state memory, digital tape, volume holographic memory, and others.
The efficiency and reliability of data channels can depend on many factors, such as the signal-to-noise ratio (SNR) of the channel. For example, storage media having high SNRs can allow for more accurate storage and recovery of data. On the other hand, storage media having low SNRs can result in high error rates, including misread and lost data. Similarly, the accuracy of a digital data communication channel depends on its SNR. High-SNR communication channels can transmit data quickly and accurately, while low-SNR communication channels can be plagued with errors, such as dropped messages.
Error correcting code (ECC) can provide a way to reduce errors in data storage and transmission by introducing data redundancy into the communication channel, typically in the form of extra bits that are used to check the validity of the original data. ECCs typically utilize codewords, which are specific patterns of bits or symbols in a storage medium or transmission signal, to group data into chunks to be checked for errors.
Low-density parity-check (LDPC) is a particular type of ECC. When using LDPC, original data is encoded using an LDPC code. An LDPC code can be represented mathematically as a two-dimensional matrix. An LDPC code can also be represented graphically, as a bipartite graph containing two sets of nodes (variable nodes and check nodes) connected by edges. Encoding based on an LDPC code produces a codeword, which can be decoded to produce the original data even in the presence of channel degradation and/or data corruption. LDPC decoding is an iterative process in which different nodes of the LDPC code update each other based on calculated probabilities regarding individual bits of the codeword.